/* NFE
* (C) Copyright Beetlestech , Ltd. 2014, All Rights Reserved.
*/
package com.beetlestech.nfe.main.biz.com;

import com.beetlestech.nfe.main.biz.com.dto.UserInfoDTO;
import com.beetlestech.nfe.main.db.tbl.TloginlgDTO;
//import com.beetlestech.nfe.main.db.tbl.EmployeeDTO;

/**
 * HbLogin Bizロジックのインタフェース
 *
 * 変更履歴
 * REV.         変更日付           変更者              変更内容
 * -------      ---------------    ----------------    ------------------
 * 1.0          2014/02/25         GD                  新規作成
 *
 */
public interface HbLogin {
	/**
	 * ログインする
	 *
	 * 処理詳細：
	 * 1共通メソッドを呼び出して、「認証タイプ」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbComblcmMaster.getComblcmInfo()
	 *
	 * 引渡しデータ:
	 *
	 * 「HbLoginImpl.APPL_ID_COM」
	 *
	 * 「HbLoginImpl.FUNCTION_ID_MODE」
	 *
	 * 「HbLoginImpl.ITEM_ID_AUTHEBTICATION_TYPE」
	 *
	 * 2共通メソッドを呼び出して、「ログインIDの種類」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbComblcm.getComblcmInfo()
	 *
	 * 引渡しデータ:
	 *
	 * 「HbLoginImpl.APPL_ID_COM」
	 *
	 * 「HbLoginImpl.FUNCTION_ID_MODE」
	 *
	 * 「HbLoginImpl.ITEM_ID_LOGINUSERID_MODE」
	 *
	 * 3共通メソッドを呼び出して、「職員基本情報」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbUser.getLoginUserInfo()
	 *
	 * 引渡しデータ:
	 *
	 * 入力値「ログインID」
	 *
	 * 2の「ログインIDの種類」
	 *
	 * 43で「職員基本情報」！＝　nullの場合、以下の認証処理を行う。
	 *
	 * 4.11で取得した「認証タイプ」＝「TYPE_CIS」の場合、以下を行う
	 *
	 * 4.1.1共通メソッドを呼び出して、「認証可否」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbAuthentication.authenticate()
	 *
	 * 引渡しデータ:
	 *
	 * 入力値「ログインID」
	 *
	 * 入力値「パスワード」
	 *
	 * 3で「職員基本情報」
	 *
	 * 4.1.24.1.1の「認証可否」＝「CtgCodeConstant.TLOGINLG_RESULT.LOGIN_SUCCESS」の場合以下を行う
	 *
	 * 共通メソッドを呼び出して、「パスワードの有効期限間近か確認する」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbAuthentication.notifyPwExpDate()
	 *
	 * 引渡しデータ:
	 *
	 * 3で「職員基本情報」
	 *
	 * 4.21で取得した「認証タイプ」＝「TYPE_LDAP」の場合、以下を行う
	 *
	 * 共通メソッドを呼び出して、「認証可否LDAP」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbAuthentication.authenticateLDAP()
	 *
	 * 引渡しデータ:
	 *
	 * 入力値「ログインID」
	 *
	 * 入力値「パスワード」
	 *
	 * 54.1,4.2の「認証可否」！＝「CtgCodeConstant.TLOGINLG_RESULT.LOGIN_FAIL」の場合以下を行う
	 *
	 * 共通メソッドを呼び出して、「セッション情報を格納」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbLogin.createSession（）
	 *
	 * 引渡しデータ:
	 *
	 * 入力値「ログインID」
	 *
	 * 2で取得した職員基本情報の「職員ID」
	 *
	 * 「認証可否」＝「CtgCodeConstant.TLOGINLG_RESULT.LOGIN_SUCCESS」の場合
	 *
	 * ２の「職員基本情報」
	 *
	 * 以外
	 *
	 * 「職員基本情報」=null
	 *
	 * 6共通メソッドを呼び出して、「wsNo」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbWorkstationProfie.getWsInfo()
	 *
	 * 引渡しデータ:
	 *
	 * 入力値「ホスト名」
	 *
	 * ServletRequestから取得「IPアドレス」
	 *
	 * 7共通メソッドを呼び出して、「ログを」を記述する。
	 *
	 * メソッド名：
	 *
	 * HbLogin. recordLogin()
	 *
	 * 引渡しデータ:
	 *
	 * 入力値「ログインID」
	 *
	 * 1の「職員ID」
	 *
	 * 2の「wsNo」
	 *
	 * 2.1もしくは3の「ログイン成否」
	 *
	 * ServletRequestから取得「IPアドレス」
	 *
	 * 入力値「ホスト名」
	 *
	 * 「セッションID」
	 *
	 * 82もしくは3での認証可否結果 および チェック結果に基づき、以下処理を行う。
	 *
	 * 8.1「例外処理」
	 *
	 * 1で取得した「認証タイプ」＝「TYPE_CIS」の場合、以下を行う
	 *
	 * 認証可否結果が"0"(認証成功)かつ 2.2 のチェック結果がFalse の場合
	 *
	 * 「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10520WS
	 *
	 * パラメーター
	 *
	 * 2 で戻された、パスワード期限年
	 *
	 * 2 で戻された、パスワード期限月
	 *
	 * 2 で戻された、パスワード期限日
	 *
	 * 2 で戻された、パスワード期限切れまでの日数
	 *
	 * 8.2「例外処理」
	 *
	 * 1で取得した「認証タイプ」＝「TYPE_LDAP」の場合、以下を行う
	 *
	 * 認証可否結果が"0"(認証成功)かつ2.2のパスワード期限情報のチェック結果がFalseの場合
	 *
	 * 「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10520WS
	 *
	 * パラメーター
	 *
	 * 2 で戻された、パスワード期限年
	 *
	 * 2 で戻された、パスワード期限月
	 *
	 * 2 で戻された、パスワード期限日
	 *
	 * 2 で戻された、パスワード期限切れまでの日数
	 *
	 * 8.3「例外処理」
	 *
	 * 2.1で取得した「認証結果」=「CtgCodeConstant.TLOGINLG_RESULT.LOGIN_FAIL」 の場合、　
	 *
	 * 「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10170WS
	 *
	 * パラメーター
	 *
	 * SH_IDPASS = "ログインIDまたはパスワード"
	 *
	 * 8.4「例外処理」
	 *
	 * 2.1で取得した「認証可否」＝「CtgCodeConstant.TLOGINLG_RESULT.NOT_UPDATE」 の場合
	 *
	 * 「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10530WS
	 *
	 * パラメーター
	 *
	 * なし
	 *
	 * 8.5「例外処理」
	 *
	 * 2.1で取得した「認証可否」＝「CtgCodeConstant.TLOGINLG_RESULT.EXPIRED」 の場合
	 *
	 * 「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * M10180WS
	 *
	 * パラメーター
	 *
	 * SH_PASS = "パスワード"
	 *
	 * 92.1で「認証可否」＝「CtgCodeConstant.TLOGINLG_RESULT.LOGIN_SUCCESS」の場合
	 *
	 * 戻る値「result」 = true;
	 *
	 * 2.1で「認証可否」＝「CtgCodeConstant.TLOGINLG_RESULT.LOGIN_SUCCESS」以外はの場合
	 *
	 * 戻る値「result」 = false;
	 *
	 * 10.0戻る値「result」を返す
	 *
	 * @param loginId Login NO
	 * @param password パスワード  
	 * @param companyGUID Maintenance Company
	 * @return result 認証結果  
	 */
	Boolean login(String loginName, String password,String sesID);

	/**
	 * セッションを格納する
	 *
	 * 処理詳細：
	 * 1セッション情報を格納する
	 *
	 * セッションに、入力値「ユーザ情報」を格納する。
	 *
	 * セッションに、入力値「ログインID」を格納する。
	 *
	 * セッションに、入力値「ユーザID」を格納する。
	 *
	 * @param loginId ログインID  
	 * @param shId 職員ID  
	 * @param staffInfo 職員基本情報  
	 */
	 void createSession(String loginId, UserInfoDTO staffInfo);

	/**
	 * ログインに成功したことを記録する
	 *
	 * 処理詳細：
	 * 1.0ログインログ情報（LOGINLG）を設定する
	 *
	 * TloginlgDTO.ログインID=
	 *
	 * TloginlgDTO.職員ID=
	 *
	 * TloginlgDTO.ログインアウト日=
	 *
	 * TloginlgDTO.ログインアウト時間=
	 *
	 * TloginlgDTO.ログインアウト成否=
	 *
	 * TloginlgDTO.wsNo=
	 *
	 * TloginlgDTO.IPアドレス=
	 *
	 * TloginlgDTO.ホストネーム=
	 *
	 * TloginlgDTO.セッションID=
	 *
	 * 2.0LOGINLGにログインログ情報を挿入する
	 *
	 * SQLID
	 *
	 * TLOGINLG_INSERT
	 *
	 * 引渡しデータ
	 *
	 * 処理1に設定されたTloginlgDTO
	 *
	 * @param loginId ログインID  
	 * @param shId 職員ID  
	 * @param result ログイン結果  
	 * @param wsNo wsNo  
	 * @param ipAddress IPアドレス  
	 * @param hostName ホスト名  
	 * @param sessionId セッションID  
	 */
	 void recordLogin(String loginId, String shId, String result, String wsNo, String ipAddress, String hostName, String sessionId);

	 String getSessionID(String userID);
	 
	 String getUserId(String sesID);
}